/**
 * 文件名：@AfwHandlerMethod.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.springmvc <br/>
 * 项目名：afw-mvc-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.springmvc;

import java.lang.reflect.Method;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.web.method.HandlerMethod;

import cn.efunbox.afw.core.annotation.mvc.Bind;
import cn.efunbox.afw.core.invocation.Invoker;
import cn.efunbox.afw.core.mvc.template.Templator;

/**
 * 类名：AfwHandlerMethod  <br />
 *
 * 功能：将一些配置信息附加到HandlerMethod上，丰富handlerMethod的功能
 *
 * @author xtwin <br />
 * 创建时间：2015年12月2日 下午6:02:45  <br />
 * @version 2015年12月2日
 */
@Deprecated
public class AfwHandlerMethod extends HandlerMethod {
	
	/*// 当前使用的模板
	private final Templator templator;
	
	// 拦截器
	private final HandlerInterceptor interceptors;*/
	
	// 前置action执行器列表
	private Invoker[] preInvokers;
	
	// 后置action执行器列表
	private Invoker[] postInvokers;
	
	// 模板
	private Templator templator;
	
	// 结果类型
	private String resultType;
	
	// 提取结果信息
	private String[] extract;
	
	// 数据绑定配置
	private Bind[] binds;
	
	// Spring容器
	//private BeanFactory factory;
	
	// TODO 目标bean，这个设计不太好，待优化
	//private Object handler;

	/**
	 * 构造方法
	 */
	protected AfwHandlerMethod(String beanName, BeanFactory beanFactory, Method method) {
		//super(beanName, beanFactory, method);
		/**
		 * 由于在执行时，会创建org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod对象
		 * 导致字符串格式的bean，没法执行，这里先这样写，待优化
		 * TODO 这样会导致懒加载失效，待优化
		 */
		super(beanFactory.getBean(beanName), method);
		
		// 保存spring容器，用于对获取beanName对应的bean
		//this.factory = beanFactory;
		
		//this.handler = beanName;
		//this.handler = beanFactory.getBean(beanName);
	}

	/**
	 * 构造方法
	 */
	public AfwHandlerMethod(Object bean, Method method) {
		super(bean, method);
		//this.handler = bean;
	}
	
	/**
	 * 构造方法
	 */
	protected AfwHandlerMethod(AfwHandlerMethod handlerMethod, Object handler) {
		super(handlerMethod);
		//super(handler, handlerMethod.getMethod());
		
		// 复制属性
		this.templator = handlerMethod.templator;
		this.extract = handlerMethod.extract;
		this.preInvokers = handlerMethod.preInvokers;
		this.postInvokers = handlerMethod.postInvokers;
		this.resultType = handlerMethod.resultType;
		//this.factory = handlerMethod.factory;
		//this.handler = handler;
	}
	
	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月3日 下午6:55:41<br/>
	 * 
	 * @return <br/>
	 * @see org.springframework.web.method.HandlerMethod#createWithResolvedBean()
	 */
	@Override
	public HandlerMethod createWithResolvedBean() {
		return this;
		/*Object bean = getBean();
		if (bean instanceof String) {
			return new AfwHandlerMethod(this, factory.getBean((String) bean));
		} else {
			return this;
		}*/
	}
	/*@Override
	public HandlerMethod createWithResolvedBean() {
		Object bean = getBean();
		if (bean instanceof String) {
			bean = factory.getBean((String) bean);
			
			return new AfwHandlerMethod(this, bean);
		} else {
			return this;
		}
	}*/
	
	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月4日 上午10:27:13<br/>
	 * 
	 * @return <br/>
	 * @see org.springframework.web.method.HandlerMethod#getBean()
	 */
	/*@Override
	public Object getBean() {
		return handler;
	}*/

	/**
	 * @version 2015年12月3日-下午1:44:26
	 */
	public Invoker[] getPreInvokers() {
		return preInvokers;
	}

	/**
	 * @version 2015年12月3日-下午1:44:26
	 */
	public void setPreInvokers(Invoker[] preInvokers) {
		this.preInvokers = preInvokers;
	}

	/**
	 * @version 2015年12月3日-下午1:44:26
	 */
	public Invoker[] getPostInvokers() {
		return postInvokers;
	}

	/**
	 * @version 2015年12月3日-下午1:44:26
	 */
	public void setPostInvokers(Invoker[] postInvokers) {
		this.postInvokers = postInvokers;
	}

	/**
	 * @version 2015年12月3日-下午4:34:41
	 */
	public Templator getTemplator() {
		return templator;
	}

	/**
	 * @version 2015年12月3日-下午4:34:41
	 */
	public void setTemplator(Templator templator) {
		this.templator = templator;
	}

	/**
	 * @version 2015年12月3日-下午4:57:52
	 */
	public String getResultType() {
		return resultType;
	}

	/**
	 * @version 2015年12月3日-下午4:57:52
	 */
	public void setResultType(String resultType) {
		this.resultType = resultType;
	}

	/**
	 * @version 2015年12月3日-下午5:38:05
	 */
	public String[] getExtract() {
		return extract;
	}

	/**
	 * @version 2015年12月3日-下午5:38:05
	 */
	public void setExtract(String[] extract) {
		this.extract = extract;
	}

	/**
	 * @version 2015年12月4日-下午2:00:34
	 */
	public Bind[] getBinds() {
		return binds;
	}

	/**
	 * @version 2015年12月4日-下午2:00:34
	 */
	public void setBinds(Bind[] binds) {
		this.binds = binds;
	}
}
